from pyramid.config import Configurator
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from pyramid_beaker import session_factory_from_settings

from sqlalchemy import engine_from_config

from alpha.modelos import initialize_sql
#from alpha.agregar_rutas import agregar_rutas
#from alpha.agregar_vistas import agregar_vistas

def main(global_config, **settings):
    """ This function returns a WSGI application.
    """
    engine = engine_from_config(settings, 'sqlalchemy.')
    initialize_sql(engine)
    session_factory = session_factory_from_settings(settings)
    authn_policy = AuthTktAuthenticationPolicy(
        'sosecret')
    authz_policy = ACLAuthorizationPolicy()
    config = Configurator(settings=settings,
                          root_factory='alpha.modelos.models.RootFactory',
                          authentication_policy=authn_policy,
                          authorization_policy=authz_policy,
                          session_factory=session_factory)
    config.add_static_view('static', 'alpha:static', cache_max_age=3600)
    #config= agregar_rutas(config)
    #config= agregar_vistas(config)
    config.add_route('redirect', '/')
    config.add_route('main', '/main')
    config.add_route('login', '/login')
    config.add_route('logout', '/logout')
    config.add_route('usuarios', '/usuarios')
    config.add_route('roles', '/roles')
    config.add_route('proyectos', '/proyectos')
    config.add_route('desarrollo', '/desarrollo')
    config.add_route('gestionConf', '/gestionConf')
    config.add_route('listarUsuarios', '/listarUsuarios')
    config.add_route('buscar_usuarios', '/buscar_usuarios/{nombreUsuario}/{nombre}/{apellido}/{telefono}/{nroDocumento}/{email}/{fechaCreacion}')
    config.add_route('buscar_proyectos', '/buscar_proyectos/{nombre}/{nroFases}/{fechaCreacion}/{estado}')
    config.add_route('buscar_items_por_fases', '/buscar_items_por_fases/{idFase}/{nombre}/{complejidad}/{version}/{estado}')
    config.add_route('buscar_tipo_items_por_proyecto', '/buscar_tipo_items_por_proyecto/{id_proyecto}/{nombre}/{nroAtributos}')
    config.add_route('listarUsuarios_Rol', '/listarUsuarios_Rol/{idRol}')
    config.add_route('listarNoUsuarios_Rol', '/listarNoUsuarios_Rol/{idRol}')  
    config.add_route('listarRoles_Usuario', '/listarRoles_Usuario/{idUsuario}')
    config.add_route('listarNoRoles_Usuario', '/listarNoRoles_Usuario/{idUsuario}')   
    config.add_route('listarRoles', '/listarRoles')
    config.add_route('listarTipoRol', '/listarTipoRol')
    config.add_route('listarTipoAtributo', '/listarTipoAtributo')
    config.add_route('listarProyectos', '/listarProyectos')
    config.add_route('crearUsuarios', '/crearUsuarios')
    config.add_route('ingresar', '/ingresar')
    config.add_route('eliminarUsuarios', '/eliminarUsuarios')
    config.add_route('modificarUsuarios', '/modificarUsuarios')
    config.add_route('eliminarRol', '/eliminarRol')
    config.add_route('modificarRol', '/modificarRol')    
    config.add_route('crearRol', '/crearRol')
    config.add_route('eliminarProyecto', '/eliminarProyecto')
    config.add_route('modificarProyecto', '/modificarProyecto')    
    config.add_route('crearProyecto', '/crearProyecto')
    config.add_route('iniciarProyecto', '/iniciarProyecto')
    config.add_route('terminarProyecto', '/terminarProyecto')
    config.add_route('asignarUsuarios_desdeABMRol', '/asignarUsuarios_desdeABMRol')
    config.add_route('asignarRoles_desdeABMUsuarios', '/asignarRoles_desdeABMUsuarios')
    config.add_route('listarNoPermisos_Rol', '/listarNoPermisos_Rol/{idRol}')
    config.add_route('listarPermisos_Rol', '/listarPermisos_Rol/{idRol}')
    config.add_route('asignarPermisos_desdeABMRol', '/asignarPermisos_desdeABMRol')
    config.add_route('listarPermisos_Logueado', '/listarPermisos_Logueado')
    config.add_route('listarUsuarios_conRolLider', '/listarUsuarios_conRolLider/{id_proyecto}')
    config.add_route('mostrarLider_actual', '/mostrarLider_actual/{id_proyecto}')
    config.add_route('asignarLider_desdeABMProyecto', '/asignarLider_desdeABMProyecto')
    config.add_route('crear_tipo_item', '/crear_tipo_item')
    config.add_route('listarAtributos_tipoItem', '/listarAtributos_tipoItem/{id_tipoItem}')
    config.add_route('listar_tipo_items_por_proyecto', '/listar_tipo_items_por_proyecto/{id_proyecto}')
    config.add_route('listar_fases_por_proyecto', '/listar_fases_por_proyecto/{id_proyecto}')
    config.add_route('crear_fase', '/crear_fase')
    config.add_route('eliminar_fase', '/eliminar_fase')
    config.add_route('eliminar_tipo_item', '/eliminar_tipo_item')
    config.add_route('listar_tipo_items_por_fase', '/listar_tipo_items_por_fase/{id_fase}')
    config.add_route('listarFases_Rol', '/listarFases_Rol/{idRol}')
    config.add_route('listarNoFases_Rol', '/listarNoFases_Rol/{idRol}')
    config.add_route('listarProyectos_Rol', '/listarProyectos_Rol/{idRol}')
    config.add_route('listarNoProyectos_Rol', '/listarNoProyectos_Rol/{idRol}')
    config.add_route('listarTipoItem_Rol', '/listarTipoItem_Rol/{idRol}')
    config.add_route('listarNoTipoItem_Rol', '/listarNoTipoItem_Rol/{idRol}')
    config.add_route('asignarProyectos_desdeABMRol', '/asignarProyectos_desdeABMRol')
    config.add_route('asignarFases_desdeABMRol', '/asignarFases_desdeABMRol')
    config.add_route('asignarTiposItem_desdeABMRol', '/asignarTiposItem_desdeABMRol')
    config.add_route('modificar_fase', '/modificar_fase')
    config.add_route('modificar_tipo_item', '/modificar_tipo_item')
    config.add_route('listar_no_tipo_items_por_fase', '/listar_no_tipo_items_por_fase/{id_fase}')
    config.add_route('asignarTiposItem_desdeABMProyecto', '/asignarTiposItem_desdeABMProyecto')
    config.add_route('listar_no_tipo_items_por_proyecto', '/listar_no_tipo_items_por_proyecto/{id_proyecto}')
    config.add_route('listar_no_fases_por_proyecto', '/listar_no_fases_por_proyecto/{id_proyecto}')
    config.add_route('importar_tipo_item', '/importar_tipo_item')
    config.add_route('importar_fases', '/importar_fases')
    config.add_route('crear_atributo', '/crear_atributo')
    config.add_route('modificar_atributo', '/modificar_atributo')
    config.add_route('crear_item', '/crear_item')
    config.add_route('modificar_item', '/modificar_item')
    config.add_route('eliminar_item', '/eliminar_item')
    config.add_route('modificar_atributo_item', '/modificar_atributo_item')
    config.add_route('listar_items_por_fases', '/listar_items_por_fases/{idFase}')
    config.add_route('listarAtributos_Item', '/listarAtributos_Item/{idItem}')
    config.add_route('listarVersionesAnteriores_Revertir', '/listarVersionesAnteriores_Revertir/{idItem}')
    config.add_route('listar_antecesor', '/listar_antecesor/{idItem}')
    config.add_route('revertir_item', '/revertir_item')
    config.add_route('relacionar_antecesor', '/relacionar_antecesor')
    config.add_route('relacionar_padre', '/relacionar_padre')
    config.add_route('revivir_items', '/revivir_items')
    config.add_route('listar_items_fase_ant', '/listar_items_fase_ant/{idItem}')
    config.add_route('listar_items_eliminados', '/listar_items_eliminados/{idFase}')
    config.add_route('listar_padre', '/listar_padre/{idItem}')
    config.add_route('listar_items_fase', '/listar_items_fase/{idItem}')
    config.add_route('listar_historial_item', '/listar_historial_item/{idItem}')
    
    config.add_view('alpha.vistas.views.redirect', route_name='redirect')
    config.add_view('alpha.vistas.listar.listarUsuarios', route_name='listarUsuarios')
    config.add_view('alpha.vistas.listar.buscar_usuarios', route_name='buscar_usuarios')
    config.add_view('alpha.vistas.listar.buscar_proyectos', route_name='buscar_proyectos')
    config.add_view('alpha.vistas.listar.buscar_items_por_fases', route_name='buscar_items_por_fases')
    config.add_view('alpha.vistas.listar.buscar_tipo_items_por_proyecto', route_name='buscar_tipo_items_por_proyecto')
    config.add_view('alpha.vistas.listar.listarUsuarios_Rol', route_name='listarUsuarios_Rol')
    config.add_view('alpha.vistas.listar.listarNoUsuarios_Rol', route_name='listarNoUsuarios_Rol')
    config.add_view('alpha.vistas.listar.listarRoles_Usuario', route_name='listarRoles_Usuario')
    config.add_view('alpha.vistas.listar.listarNoRoles_Usuario', route_name='listarNoRoles_Usuario')    
    config.add_view('alpha.vistas.listar.listarRoles', route_name='listarRoles')
    config.add_view('alpha.vistas.listar.listarTipoRol', route_name='listarTipoRol')
    config.add_view('alpha.vistas.listar.listarTipoAtributo', route_name='listarTipoAtributo')
    config.add_view('alpha.vistas.listar.listarProyectos', route_name='listarProyectos')
    config.add_view('alpha.vistas.login.ingresar', route_name='ingresar')
    config.add_view('alpha.vistas.views.eliminarUsuarios', route_name='eliminarUsuarios')
    config.add_view('alpha.vistas.views.modificarUsuarios', route_name='modificarUsuarios')
    config.add_view('alpha.vistas.views.eliminarRol', route_name='eliminarRol')
    config.add_view('alpha.vistas.views.modificarRol', route_name='modificarRol') 
    config.add_view('alpha.vistas.views.crearRol', route_name='crearRol')
    config.add_view('alpha.vistas.views.eliminarProyecto', route_name='eliminarProyecto')
    config.add_view('alpha.vistas.views.modificarProyecto', route_name='modificarProyecto') 
    config.add_view('alpha.vistas.views.crearProyecto', route_name='crearProyecto')
    config.add_view('alpha.vistas.views.iniciarProyecto', route_name='iniciarProyecto')
    config.add_view('alpha.vistas.views.terminarProyecto', route_name='terminarProyecto')
    config.add_view('alpha.vistas.views.asignarUsuarios_desdeABMRol', route_name='asignarUsuarios_desdeABMRol')
    config.add_view('alpha.vistas.views.asignarRoles_desdeABMUsuarios', route_name='asignarRoles_desdeABMUsuarios')
    config.add_view('alpha.vistas.views.main', route_name='main', renderer='alpha:templates/main.pt', permission='view')
    config.add_view('alpha.vistas.views.crearUsuarios', route_name='crearUsuarios')
    config.add_view('alpha.vistas.views.usuarios', route_name='usuarios',renderer='alpha:templates/usuarios.pt', permission='edit')
    config.add_view('alpha.vistas.views.desarrollo', route_name='desarrollo',renderer='alpha:templates/desarrollo.pt', permission='edit')
    config.add_view('alpha.vistas.views.gestionConf', route_name='gestionConf',renderer='alpha:templates/gestionConf.pt', permission='edit')
    config.add_view('alpha.vistas.views.roles', route_name='roles',renderer='alpha:templates/roles.pt', permission='edit')  
    config.add_view('alpha.vistas.views.proyectos', route_name='proyectos', renderer='alpha:templates/proyectos.pt', permission='edit')                  
    config.add_view('alpha.vistas.login.login', route_name='login',renderer='alpha:templates/login.pt')
    config.add_view('alpha.vistas.login.logout', route_name='logout',permission='edit')
    config.add_view('alpha.vistas.listar.listarNoPermisos_Rol', route_name='listarNoPermisos_Rol')
    config.add_view('alpha.vistas.listar.listarPermisos_Rol', route_name='listarPermisos_Rol')
    config.add_view('alpha.vistas.views.asignarPermisos_desdeABMRol', route_name='asignarPermisos_desdeABMRol')
    config.add_view('alpha.vistas.listar.listarPermisos_Logueado', route_name='listarPermisos_Logueado')
    config.add_view('alpha.vistas.listar.listarUsuarios_conRolLider', route_name='listarUsuarios_conRolLider')
    config.add_view('alpha.vistas.listar.mostrarLider_actual', route_name='mostrarLider_actual')
    config.add_view('alpha.vistas.views.asignarLider_desdeABMProyecto', route_name='asignarLider_desdeABMProyecto')
    config.add_view('alpha.vistas.views.crear_tipo_item', route_name='crear_tipo_item')
    config.add_view('alpha.vistas.listar.listarAtributos_tipoItem', route_name='listarAtributos_tipoItem')
    config.add_view('alpha.vistas.listar.listar_tipo_items_por_proyecto', route_name='listar_tipo_items_por_proyecto')
    config.add_view('alpha.vistas.listar.listar_fases_por_proyecto', route_name='listar_fases_por_proyecto')
    config.add_view('alpha.vistas.views.crear_fase', route_name='crear_fase')
    config.add_view('alpha.vistas.views.eliminar_fase', route_name='eliminar_fase')
    config.add_view('alpha.vistas.views.eliminar_tipo_item', route_name='eliminar_tipo_item')
    config.add_view('alpha.vistas.listar.listar_tipo_items_por_fase', route_name='listar_tipo_items_por_fase')
    config.add_view('alpha.vistas.listar.listarNoProyectos_Rol', route_name='listarNoProyectos_Rol')
    config.add_view('alpha.vistas.listar.listarProyectos_Rol', route_name='listarProyectos_Rol')
    config.add_view('alpha.vistas.listar.listarFases_Rol', route_name='listarFases_Rol')
    config.add_view('alpha.vistas.listar.listarNoFases_Rol', route_name='listarNoFases_Rol')
    config.add_view('alpha.vistas.listar.listarTipoItem_Rol', route_name='listarTipoItem_Rol')
    config.add_view('alpha.vistas.listar.listarNoTipoItem_Rol', route_name='listarNoTipoItem_Rol')
    config.add_view('alpha.vistas.views.asignarProyectos_desdeABMRol', route_name='asignarProyectos_desdeABMRol')
    config.add_view('alpha.vistas.views.asignarFases_desdeABMRol', route_name='asignarFases_desdeABMRol')
    config.add_view('alpha.vistas.views.asignarTiposItem_desdeABMRol', route_name='asignarTiposItem_desdeABMRol')
    config.add_view('alpha.vistas.views.modificar_fase', route_name='modificar_fase')
    config.add_view('alpha.vistas.views.modificar_tipo_item', route_name='modificar_tipo_item')
    config.add_view('alpha.vistas.listar.listar_no_tipo_items_por_fase', route_name='listar_no_tipo_items_por_fase')
    config.add_view('alpha.vistas.views.asignarTiposItem_desdeABMProyecto', route_name='asignarTiposItem_desdeABMProyecto')
    config.add_view('alpha.vistas.listar.listar_no_tipo_items_por_proyecto', route_name='listar_no_tipo_items_por_proyecto')
    config.add_view('alpha.vistas.listar.listar_no_fases_por_proyecto', route_name='listar_no_fases_por_proyecto')
    config.add_view('alpha.vistas.views.importar_tipo_item', route_name='importar_tipo_item')
    config.add_view('alpha.vistas.views.importar_fases', route_name='importar_fases')
    config.add_view('alpha.vistas.views.crear_atributo', route_name='crear_atributo')
    config.add_view('alpha.vistas.views.modificar_atributo', route_name='modificar_atributo')
    config.add_view('alpha.vistas.views.crear_item', route_name='crear_item')
    config.add_view('alpha.vistas.views.modificar_item', route_name='modificar_item')
    config.add_view('alpha.vistas.views.eliminar_item', route_name='eliminar_item')
    config.add_view('alpha.vistas.views.modificar_atributo_item', route_name='modificar_atributo_item')
    config.add_view('alpha.vistas.listar.listar_items_por_fases', route_name='listar_items_por_fases')
    config.add_view('alpha.vistas.listar.listarAtributos_Item', route_name='listarAtributos_Item')
    config.add_view('alpha.vistas.listar.listarVersionesAnteriores_Revertir', route_name='listarVersionesAnteriores_Revertir')
    config.add_view('alpha.vistas.listar.listar_antecesor', route_name='listar_antecesor')
    config.add_view('alpha.vistas.views.revertir_item', route_name='revertir_item')
    config.add_view('alpha.vistas.views.relacionar_antecesor', route_name='relacionar_antecesor')
    config.add_view('alpha.vistas.views.relacionar_padre', route_name='relacionar_padre')
    config.add_view('alpha.vistas.views.revivir_items', route_name='revivir_items')
    config.add_view('alpha.vistas.listar.listar_items_fase_ant', route_name='listar_items_fase_ant')
    config.add_view('alpha.vistas.listar.listar_items_eliminados', route_name='listar_items_eliminados')
    config.add_view('alpha.vistas.listar.listar_padre', route_name='listar_padre')
    config.add_view('alpha.vistas.listar.listar_items_fase', route_name='listar_items_fase')
    config.add_view('alpha.vistas.listar.listar_historial_item', route_name='listar_historial_item')
    return config.make_wsgi_app()
